/*************************************************************************
 *File Name: myls.c
 *Author: 义文杰
 *Mail: 1165589184@qq.com
 *Created Time: 2022年06月08日 星期三 22时30分20秒
 ************************************************************************/

#include "pretask.h"

/* 实现功能有：
 * ls + 空值 ，直接展示当前ls目录下所有文件名
 * ls + 目录名 ，展示当前目录下 某目录文件下的所有文件名(暂时只能传目录名)
 * */
char* LsDir(char* FileName){

    char filename[1024] = {0};
    strcpy(filename, FileName); // 用来存储传来的文件名

    struct dirent* pdirent; // 目录的结构体

    char buf[4096] = {0}; // 用来保存文件夹下所有文件名，暂时用4096字节保存


    if(filename == NULL){ // client只传来ls，不加修饰符

        char* cwd = getcwd(NULL, 0); // 获取当前路径
        DIR* pdir = opendir(cwd); // 打开当前路径文件夹

        while((pdirent = readdir(pdir)) != NULL){ // 循环读取目录内容
            strcat(buf, pdirent->d_name); // 把每一个文件名都拼接起来
            strcat(buf, "  "); // 再拼接两个空格，增加ls可阅读性
        }
        closedir(pdir);

    }else{

        char* cwd = getcwd(NULL, 0); // 获取当前路径

        char StrcatName[1024] ={0};
        strcpy(StrcatName, cwd);
        strcat(StrcatName, "/");
        strcat(StrcatName, filename); // 把当前路径与传来的目录名拼接起来

        DIR* pdir = opendir(StrcatName); // 打开想要打开的目录

        while((pdirent = readdir(pdir)) != NULL){ // 循环读取目录内容
            strcat(buf, pdirent->d_name); // 把每一个文件名都拼接起来
            strcat(buf, "  "); // 再拼接两个空格，增加ls可阅读性
        }
        closedir(pdir);

    }

    char* dir = buf;
    return dir;

}
